home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / qbprog.EXE / BLASTER.BAS < prev    next >
BASIC Source File  |  1995-09-27  |  24KB  |  1,114 lines

  1. 'Sadece QBX'de (versiyon 7.1) çalìƒìr.
  2. 'QBX /L BLASTER ƒeklinde yüklenmeli
  3.  
  4.  
  5. DECLARE SUB Bekleme
  6. DECLARE SUB Liste ()
  7. DECLARE SUB Yaz (Bulunan$)
  8. DECLARE FUNCTION Findfirst% (Ara$, YeniDTA$, BYVAL Fattr%)
  9. DECLARE FUNCTION Findnext% (YeniDTA$)
  10. DECLARE SUB SesDinle ()
  11. DECLARE SUB SesKaydet ()
  12. DECLARE SUB MikrofonKontrol ()
  13. DECLARE SUB HareketliMenu ()
  14. DECLARE SUB VeriAlma ()
  15. DECLARE SUB Analiz ()
  16. DECLARE SUB MakineSuratiniOlc ()
  17. DECLARE SUB Kartara ()
  18. DECLARE SUB AnaMenu ()
  19. DECLARE SUB ArkaplanCiz ()
  20. DECLARE SUB BuDiziniBul ()
  21. DECLARE SUB CerceveCiz ()
  22. DECLARE SUB EkranAyarla ()
  23. DECLARE SUB Elveda ()
  24. DECLARE SUB KomutYorumla ()
  25. DECLARE SUB MesajYaz ()
  26. DECLARE SUB SesDosyaTara ()
  27. DECLARE SUB Kaydet
  28. DECLARE SUB SBlaster
  29.  
  30. 'AltYordamlarda paylaƒìlan deºerler
  31. COMMON SHARED MenuYatay, MenuDikey, MenuGenis, MenuYuksek, MenuSecim$
  32. COMMON SHARED EkranAdresi, Tus$, Mesaj$, Program$, Kapasite, Z, Dosya$, Dos$
  33. COMMON SHARED Hata, Dizin$, Adet, Tercih$, Yatay
  34. COMMON SHARED VerialYatay, VerialDikey, VerialBoy, Verial$, Veritipi
  35. COMMON SHARED Sbase, MakineSurati
  36.  
  37.  
  38. Kapasite = 56
  39. DIM SHARED Sec$(Kapasite), Renk(10), Al$(3), Sec1$(10)
  40.  
  41. Program$ = "Bu Program, Programlama Sanatì için Gürol DEMÿR tarafìndan yapìlmìƒtìr."
  42. ON ERROR GOTO Hatalar
  43. ArkaplanCiz
  44. Kartara
  45. IF Sbase = 0 THEN
  46.   PCOPY 3, 0
  47.   Mesaj$ = "!Sistemde sblaster uyumlu ses kartì bulunamadì..."
  48.   MesajYaz
  49.   END
  50. END IF
  51. AnaMenu
  52.  
  53. Hatalar:
  54. PCOPY 3, 0
  55.   Mesaj$ = "!Lütfen, bu hatayì bildirin...No:" + STR$(ERR)
  56.   MesajYaz
  57. END
  58.  
  59. SUB Analiz
  60. LOCATE 3, 1
  61. COLOR Renk(5), Renk(6)
  62. CLOSE #1
  63. OPEN Dizin$ + Dosya$ FOR BINARY AS #1
  64. A$ = SPACE$(20)
  65. GET #1, , A$
  66. IF A$ <> "Creative Voice File" + CHR$(&H1A) THEN Hata = 1: EXIT SUB
  67. GET #1, , BaslamaYeri%
  68.  
  69. GET #1, , Versiyon%
  70. GET #1, , Kontrol%
  71. IF Versiyon% <> 4659 - Kontrol% THEN Hata = 1: EXIT SUB
  72. LOCATE CSRLIN, 8
  73. PRINT TAB(8); "╔"; STRING$(63, "═"); "╗"
  74. Mesaj$ = "Dosya adì=" + Dosya$ + " , Büyüklük=" + LTRIM$(STR$(LOF(1))) + " byte"
  75. GOSUB Mesaj
  76. LOCATE CSRLIN, 8
  77. PRINT TAB(8); "╠"; STRING$(63, "═"); "╣"
  78. DO
  79.   GOSUB DataAl
  80.   IF BlokTipi = 1 OR BlokTipi = 2 THEN
  81.       IF Devam = 0 THEN
  82.     Devam = 1
  83.     SesBuyuk = 0
  84.       END IF
  85.   ELSE
  86.       IF Devam = 1 THEN
  87.      Devam = 0
  88.      Mesaj$ = " Ses bloku Boy=" + LTRIM$(STR$(SesBuyuk)) + " Byte, Frekans=" + LTRIM$(STR$(Ornekleme)) + " Hz, Paketleme=1:" + LTRIM$(STR$(Paket))
  89.      GOSUB Mesaj
  90.       END IF
  91.   END IF
  92.   SELECT CASE BlokTipi
  93.     CASE 1
  94.      GOSUB Blok1
  95.     CASE 2
  96.      GOSUB Blok2
  97.     CASE 3
  98.      GOSUB Blok3
  99.     CASE 4
  100.      GOSUB Blok4
  101.     CASE 5
  102.      GOSUB Blok5
  103.     CASE 6
  104.      GOSUB Blok6
  105.     CASE 7
  106.      GOSUB Blok7
  107.     CASE 0
  108.      EXIT DO
  109.   END SELECT
  110. LOOP
  111.  
  112. Mesaj$ = " Dosya Sonu..."
  113. GOSUB Mesaj
  114. LOCATE CSRLIN, 8
  115. PRINT TAB(8); "╚"; STRING$(63, "═"); "╝"
  116. EXIT SUB
  117. Mesaj:
  118.   Mesaj$ = "║ " + LEFT$(Mesaj$ + SPACE$(62), 62) + "║"
  119.   LOCATE CSRLIN, 8
  120.   PRINT Mesaj$
  121. RETURN
  122.  
  123. DataAl:
  124. A$ = " "
  125. GET #1, , A$
  126. BlokTipi = ASC(A$)
  127. RETURN
  128.  
  129. BuyuklukAl:
  130.   Buyuk = 0
  131.   GOSUB DataAl
  132.   Buyuk = Buyuk + BlokTipi - 2
  133.   GOSUB DataAl
  134.   Buyuk = Buyuk + BlokTipi * 256
  135.   GOSUB DataAl
  136.   Buyuk = Buyuk + BlokTipi * 65536
  137. RETURN
  138.  
  139. Oku:
  140.   IF Buyuk - Yer > 32000 THEN Uzunluk = 32000 ELSE Uzunluk = Buyuk - Yer
  141.   A$ = SPACE$(Uzunluk)
  142.   GET #1, , A$
  143.   Yer = Yer + Uzunluk
  144.   SesBuyuk = SesBuyuk + Uzunluk
  145.   IF Yer <> Buyuk THEN GOTO Oku
  146. RETURN
  147.  
  148. Blok1:
  149.   GOSUB BuyuklukAl
  150.  
  151.   GOSUB DataAl
  152.   Ornekleme = 1000000 \ (256 - BlokTipi)
  153.  
  154.   GOSUB DataAl
  155.   Paket = 8 / (BlokTipi + 1)
  156.  
  157.   Yer = 0
  158.   GOSUB Oku
  159. RETURN
  160.  
  161. Blok2:
  162.   GOSUB BuyuklukAl
  163.   Yer = 0
  164.   GOSUB Oku
  165. RETURN
  166.  
  167. Blok3:
  168.   GOSUB BuyuklukAl
  169.   GOSUB DataAl
  170.   SessizOrnekleme = 1000000 \ (256 - BlokTipi)
  171.   Mesaj$ = " Sessizlik bloºu boy=" + LTRIM$(STR$(Buyuk)) + " byte, frekans=" + LTRIM$(STR$(SessizOrnekleme)) + " Hz"
  172.   GOSUB Mesaj
  173. RETURN
  174.  
  175. Blok4:
  176.   GOSUB BuyuklukAl
  177.   Marker = 0
  178.   GOSUB DataAl
  179.   Marker = Marker + BlokTipi
  180.   GOSUB DataAl
  181.   Marker = Marker + BlokTipi * 256
  182.   Mesaj$ = " Sürücü özel iƒareti, ÿƒaret=" + LTRIM$(STR$(Marker))
  183.   GOSUB Mesaj
  184. RETURN
  185.  
  186. Blok5:
  187.   GOSUB BuyuklukAl
  188.   Mesaj$ = ""
  189.   DO
  190.     GOSUB DataAl
  191.     Mesaj$ = Mesaj$ + CHR$(BlokTipi)
  192.     IF BlokTipi = 0 THEN EXIT DO
  193.   LOOP
  194.   Mesaj$ = " ASCII Mesaj bloºu boy=" + LTRIM$(STR$(Buyuk)) + " byte, mesaj baƒì: " + LEFT$(Mesaj$ + SPACE$(20), 20)
  195.   GOSUB Mesaj
  196. RETURN
  197.  
  198. Blok6:
  199.   GOSUB BuyuklukAl
  200.   Tekrar = 0
  201.   GOSUB DataAl
  202.   Tekrar = Tekrar + BlokTipi
  203.   GOSUB DataAl
  204.   Tekrar = Tekrar + BlokTipi * 256
  205.   Ek$ = LTRIM$(STR$(Tekrar)) + " adet"
  206.   IF Tekrar = 65535 THEN Ek$ = "Sonsuza kadar"
  207.   Mesaj$ = "*Tekrarlama baƒlangìcì, tekrarlama sayìsì=" + Ek$
  208.   GOSUB Mesaj
  209.   IF Tekrar > 15 AND Tus$ = "'" THEN
  210.      Mesaj$ = "   ≈≈En fazla 15 tekrar dinlenecektir"
  211.      GOSUB Mesaj
  212.   END IF
  213. RETURN
  214.  
  215. Blok7:
  216.   GOSUB BuyuklukAl
  217.   Mesaj$ = "*Tekrarlama Sonu.."
  218.   GOSUB Mesaj
  219. RETURN
  220.  
  221. END SUB
  222.  
  223. SUB AnaMenu
  224. BuDiziniBul
  225. GOSUB IlkTarama
  226.  
  227. EkranYaz:
  228. EkranAyarla
  229. DEF SEG = 0: POKE 1050, PEEK(1052)
  230. Secim:
  231. DO
  232. V3 = V + V2 * 14
  233. IF V3 > Adet OR V3 > Kapasite THEN V2 = 0: V = 1: V3 = 1
  234. Dosya$ = RTRIM$(Sec$(V3))
  235. COLOR Renk(5), Renk(6)
  236. GOSUB AktifResim
  237. DO: A$ = INKEY$: LOOP UNTIL A$ <> ""
  238. COLOR Renk(1), Renk(2)
  239. GOSUB AktifResim
  240. IF LEN(A$) = 2 THEN
  241.     Z = ASC(RIGHT$(A$, 1))
  242.     SELECT CASE Z
  243.       CASE 80
  244.         IF V < 14 THEN V = V + 1 ELSE IF V2 < 4 THEN V2 = V2 + 1: V = 1
  245.       CASE 72
  246.         IF V > 1 THEN V = V - 1 ELSE IF V2 > 0 THEN V2 = V2 - 1: V = 14
  247.       CASE 75
  248.         IF V2 > 0 THEN V2 = V2 - 1
  249.       CASE 77
  250.         IF V2 < 4 THEN V2 = V2 + 1
  251.      END SELECT
  252. ELSE
  253.     Z = ASC(A$)
  254.     SELECT CASE Z
  255.       CASE 27
  256.          Elveda
  257.       CASE 13
  258.         IF INSTR(Sec$(V3), "<Dz>") = 0 THEN
  259.            GOTO Hareket
  260.         ELSE
  261.            IF INSTR(Sec$(V3), "Önceki") = 0 THEN
  262.           Dizin$ = Dizin$ + RTRIM$(LEFT$(Sec$(V3), 12)) + "\"
  263.            ELSE
  264.           S = 0
  265.           FOR I = LEN(Dizin$) TO 1 STEP -1
  266.              IF MID$(Dizin$, I, 1) = "\" THEN
  267.             IF S = 0 THEN S = 1 ELSE EXIT FOR
  268.              END IF
  269.              Dizin$ = LEFT$(Dizin$, I - 1)
  270.           NEXT
  271.            END IF
  272.            LOCATE 23, 16, 0
  273.            GOSUB IlkTarama
  274.            GOTO EkranYaz
  275.         END IF
  276.       CASE 242, 245
  277.         GOTO Hareket
  278.       CASE 243, 244
  279.         IF INSTR(Sec$(V3), "<Dz>") = 0 THEN
  280.            GOTO Hareket
  281.         END IF
  282.      END SELECT
  283. END IF
  284. LOOP
  285.  
  286.  
  287. 'Aktif Resim Dosyasìnì farklì renkte göster
  288. AktifResim:
  289. LOCATE 4 + V, 4 + V2 * 18
  290. PRINT Sec$(V3)
  291. RETURN
  292.  
  293. 'ÿƒlem Rutini
  294. Hareket:
  295. KomutYorumla
  296. IF Hata = 2 THEN GOSUB IlkTarama
  297. GOTO EkranYaz
  298. GOTO Secim
  299.  
  300. 'ÿlk Tarama
  301. IlkTarama:
  302. SesDosyaTara
  303. V = 1: V2 = 0
  304. RETURN
  305. END SUB
  306.  
  307. SUB ArkaplanCiz
  308. EkranAdresi = &HB800
  309. DEF SEG = 0
  310. IF PEEK(&H449) = 7 THEN EkranAdresi = &HB000
  311.   Renk(1) = 1: 'Normal yazì
  312.   Renk(2) = 7
  313.   Renk(3) = 14: 'Menü adì
  314.   Renk(4) = 3
  315.   Renk(5) = 7: 'Aktif Satìr
  316.   Renk(6) = 1
  317.   Renk(7) = 15: 'Menü seçim rengi
  318.   Renk(8) = 7
  319.   Renk(9) = 4:  'Veri Rengi
  320.   Renk(10) = 7
  321.  
  322. Al$(0) = "QWERTYUIOPªÜASDFGHJKL₧ÿZXCVBNMÖÇ"
  323. Al$(1) = "qwertyuìopºüasdfghjklƒizxcvbnmöç"
  324. Al$(2) = "1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuopasdfghjklizxcvbnm:.\"
  325. Al$(3) = "1234567890"
  326.  
  327. KEY 2, CHR$(242)
  328. KEY 3, CHR$(243)
  329. KEY 4, CHR$(244)
  330. KEY 5, CHR$(245)
  331.   SCREEN , , 3, 0
  332.   COLOR 9, 7: CLS
  333.     A$ = "Programlama Sanatì..."
  334.     A = LEN(A$)
  335.     FOR I = 0 TO 1840 / A
  336.        B = 80 - C
  337.        IF B <= A THEN
  338.       PRINT LEFT$(A$, B);
  339.       PRINT RIGHT$(A$, A - B);
  340.       C = A - B: D = C
  341.        ELSE
  342.       PRINT A$;
  343.       C = C + A
  344.        END IF
  345.     NEXT
  346.   DEF SEG = EkranAdresi + 256 * 3
  347.     FOR I = 3680 + D * 2 TO 4000 STEP A * 2
  348.        FOR Y = 1 TO A
  349.     POKE I + (Y - 1) * 2, ASC(MID$(A$, Y, 1))
  350.        NEXT
  351.     NEXT
  352.     SCREEN , , 0
  353.     K = 0
  354.     FOR I = 1 TO LEN(Program$)
  355.        K = K + ASC(MID$(Program$, I, 1)) * I
  356.     NEXT
  357.     IF K <> 258646 THEN
  358.     PCOPY 3, 0
  359.     Mesaj$ = "1Programcìnìn ismine saygì duymak gerekmez mi?"
  360.      MesajYaz
  361.     END
  362.     END IF
  363. END SUB
  364.  
  365. SUB BuDiziniBul
  366.      Dizin$ = CURDIR$
  367.      IF LEN(Dizin$) > 3 THEN Dizin$ = Dizin$ + "\"
  368. END SUB
  369.  
  370. SUB CerceveCiz
  371.  COLOR Renk(1), Renk(2)
  372.    FOR I = 1 TO MenuYuksek - 1
  373.      LOCATE MenuYatay + I, MenuDikey: PRINT "║"; STRING$(MenuGenis, " "); "║"
  374.    NEXT
  375.    LOCATE MenuYatay, MenuDikey
  376.      PRINT "╔"; STRING$(MenuGenis, "═"); "╗"
  377.    LOCATE MenuYatay + MenuYuksek, MenuDikey
  378.      PRINT "╚"; STRING$(MenuGenis, "═"); "╝";
  379.  
  380.  DEF SEG = EkranAdresi
  381.    FOR I = 1 TO MenuGenis + 1
  382.      POKE ((MenuYatay + MenuYuksek) * 160 + (MenuDikey + I) * 2 + 1), 9
  383.    NEXT
  384.    FOR I = 1 TO MenuYuksek + 1
  385.      TR = ((MenuYatay + I - 1) * 160 + (MenuDikey + MenuGenis + 1) * 2 + 1)
  386.      POKE TR, 9
  387.      POKE TR + 2, 9
  388.    NEXT
  389.  
  390.  DEF SEG
  391.  LOCATE MenuYatay + MenuYuksek, MenuDikey + MenuGenis - LEN(Cer$) - 1
  392.  PRINT Cer$
  393.  COLOR Renk(3), Renk(4): LOCATE MenuYatay, MenuDikey + 3: PRINT Sec$(0)
  394. END SUB
  395.  
  396. SUB EkranAyarla
  397. PCOPY 3, 0
  398.       Sec$(0) = "Ana Menu"
  399.       MenuYatay = 2
  400.       MenuGenis = LEN(Dizin$) + 14
  401.       MenuDikey = 75 - MenuGenis
  402.       F = MenuDikey
  403.       MenuYuksek = 2
  404.       CerceveCiz
  405.       Sec$(0) = ""
  406.       MenuYatay = 4
  407.       MenuDikey = 2
  408.       MenuGenis = 73
  409.       MenuYuksek = 15
  410.       CerceveCiz
  411.       MenuYatay = 19
  412.       MenuYuksek = 2
  413.       CerceveCiz
  414.       COLOR Renk(1), Renk(2)
  415.       LOCATE 3, F + 1
  416.       PRINT "Aktif Dizin = "; Dizin$
  417.       LOCATE 4, F
  418.       PRINT "╩"
  419.       LOCATE 4, 76
  420.       PRINT "╣"
  421.       LOCATE 19, 2
  422.       PRINT "╠"
  423.       LOCATE 19, 76
  424.       PRINT "╣"
  425.       LOCATE 20, 8
  426.       PRINT "Sesi Dinle    Kaydet    Bilgi Al    Dosya Sil    MicroTest     Çìkìƒ"
  427.       COLOR Renk(7), Renk(8)
  428.       LOCATE 20, 55
  429.       PRINT "F5"
  430.       LOCATE 20, 68
  431.       PRINT "Esc"
  432.       LOCATE 20, 3
  433.       PRINT "Enter"
  434.       LOCATE 20, 20
  435.       PRINT "F2"
  436.       LOCATE 20, 30
  437.       PRINT "F3"
  438.       LOCATE 20, 42
  439.       PRINT "F4"
  440. COLOR Renk(1), Renk(2)
  441. FOR I = 1 TO 14
  442. LOCATE 4 + I, 3 + 1
  443. PRINT Sec$(I)
  444. LOCATE 4 + I, 21 + 1
  445. PRINT Sec$(I + 14)
  446. LOCATE 4 + I, 39 + 1
  447. PRINT Sec$(I + 28)
  448. LOCATE 4 + I, 57 + 1
  449. PRINT Sec$(I + 42)
  450. NEXT
  451. END SUB
  452.  
  453. SUB Elveda
  454.    Cer$ = ""
  455.    Sec$(0) = "[ Ses Kayìt ve Dinleme Programì Ver-1.0]"
  456.    PCOPY 3, 0
  457.      MenuYatay = 2
  458.      MenuDikey = 3
  459.      MenuGenis = 73
  460.      MenuYuksek = 2
  461.     CerceveCiz
  462.      COLOR Renk(2), Renk(1)
  463.      FOR I = 7 TO 25: LOCATE I, 1: PRINT SPACE$(80); : NEXT
  464.      COLOR Renk(1), Renk(2)
  465.      LOCATE 3, 5
  466.      PRINT Program$
  467.      LOCATE 6, 1
  468.      END
  469. END SUB
  470.  
  471. SUB HareketliMenu
  472.   CerceveCiz
  473.   FOR I = 1 TO MenuYuksek - 1
  474.     Yata = MenuYatay + I: G = I
  475.     RenkA = Renk(1): RenkB = Renk(2)
  476.     GOSUB AktifYaz
  477.   NEXT
  478.  
  479.   Yatay = MenuYatay + 1
  480.  
  481.   DO
  482.      G = Yatay - MenuYatay
  483.      Yata = Yatay: RenkA = Renk(5): RenkB = Renk(6): GOSUB AktifYaz
  484.  
  485.      DO: Tus$ = INKEY$: LOOP UNTIL Tus$ <> ""
  486.  
  487.      RenkA = Renk(1): RenkB = Renk(2): GOSUB AktifYaz
  488.  
  489.      IF LEN(Tus$) = 2 THEN
  490.      Z = ASC(RIGHT$(Tus$, 1))
  491.      SELECT CASE Z
  492.         CASE 80
  493.            Yatay = Yatay + 1: IF Yatay = MenuYatay + MenuYuksek THEN Yatay = MenuYatay + 1
  494.         CASE 72
  495.            Yatay = Yatay - 1: IF Yatay = MenuYatay THEN Yatay = MenuYatay + MenuYuksek - 1
  496.      END SELECT
  497.      END IF
  498.  
  499.  IF ASC(Tus$) = 27 THEN
  500.     Tus$ = ""
  501.     EXIT SUB
  502.  END IF
  503.  
  504.  IF ASC(Tus$) = 13 THEN Yer = ASC(Sec1$(G)) + 1: Tus$ = MID$(Sec1$(G), Yer, 1)
  505.  V = INSTR(LEFT$(Al$(1), 34), Tus$)
  506.  IF V > 0 THEN Tus$ = MID$(Al$(0), V, 1)
  507.  V = INSTR(MenuSecim$, Tus$)
  508.  IF V > 0 THEN Yatay = MenuYatay + V: EXIT SUB
  509. LOOP
  510.  
  511. AktifYaz:
  512.  LOCATE Yata, MenuDikey + 1
  513.   COLOR RenkA, RenkB
  514.      PRINT MID$(Sec1$(G), 2, LEN(Sec1$(G)) - 1)
  515.     Yer = ASC(Sec1$(G)) + 1
  516.     LOCATE Yata, MenuDikey + 1 + Yer - 2
  517.        COLOR Renk(7)
  518.      PRINT MID$(Sec1$(G), Yer, 1)
  519. RETURN
  520.  
  521. END SUB
  522.  
  523. SUB Kartara
  524. DIM Adres(6)
  525.  
  526. Adres(1) = &H210
  527. Adres(2) = &H220
  528. Adres(3) = &H230
  529. Adres(4) = &H240
  530. Adres(5) = &H250
  531. Adres(6) = &H260
  532. FOR I = 1 TO 6
  533.     GOSUB Seskartara
  534. NEXT
  535. EXIT SUB
  536.  
  537. Seskartara:
  538.     TABAN = Adres(I)
  539.     GOSUB SesKartTetikle
  540.     GOSUB SesKartVarveyaYok
  541.     IF Var = 1 THEN Sbase = TABAN
  542. RETURN
  543.  
  544. SesKartTetikle:
  545. 'ÿlk deºerler gönderiliyor
  546.     A = INP(TABAN + &HE)
  547.     OUT TABAN + 6, 1
  548.     A = INP(TABAN + 6)
  549.     A = INP(TABAN + 6)
  550.     A = INP(TABAN + 6)
  551.     OUT TABAN + 6, 0
  552. RETURN
  553.  
  554. SesKartVarveyaYok:
  555. Var = 0
  556. FOR Y3 = 1 TO 10
  557.    IF INP(TABAN + &HE) AND 128 <> 0 THEN
  558.       IF INP(TABAN + &HA) = 170 THEN
  559.      Var = 1
  560.      EXIT FOR
  561.       END IF
  562.    END IF
  563. NEXT Y3
  564. RETURN
  565.  
  566. END SUB
  567.  
  568. SUB KomutYorumla
  569.   Hata = 0
  570.   PCOPY 3, 0
  571.  
  572.   IF Z = 13 THEN
  573.      Tus$ = "'"
  574.      Analiz
  575.      Tus$ = ""
  576.      IF Hata = 0 THEN
  577.      SesDinle
  578.      END IF
  579.   END IF
  580.  
  581.   IF Z = 242 THEN
  582.      SesKaydet
  583.   END IF
  584.  
  585.   IF Z = 243 THEN
  586.      Analiz
  587.      IF Hata = 0 THEN DO: LOOP UNTIL INKEY$ <> ""
  588.   END IF
  589.  
  590.   IF Z = 244 THEN
  591.      Mesaj$ = "2" + Dosya$ + " silinsin mi?  E)vet, H)ayìr"
  592.      MesajYaz
  593.      IF Tercih$ = "E" THEN
  594.      CLOSE #1
  595.      KILL Dizin$ + Dosya$
  596.      Hata = 2
  597.      END IF
  598.   END IF
  599.  
  600.   IF Z = 245 THEN
  601.      MikrofonKontrol
  602.      IF Hata = 0 THEN DO: LOOP UNTIL INKEY$ <> ""
  603.   END IF
  604.  
  605.   IF Hata = 1 THEN
  606.      Mesaj$ = "1" + Dosya$ + " bir ses dosyasì deºil!!"
  607.      MesajYaz
  608.   END IF
  609. END SUB
  610.  
  611. SUB Liste STATIC
  612.   'Verilen dizine geç
  613.    Mevcut$ = CURDIR$
  614.    CHDIR "\"
  615.    Diz$ = "\"
  616.    IF LEN(Dizin$) > 3 THEN Diz$ = MID$(Dizin$, 3, LEN(Dizin$) - 3)
  617.    CHDIR Diz$
  618.  
  619.    'Ara
  620.     Dtabuf$ = SPACE$(43)
  621.     Sonuc = Findfirst%("*.*" + CHR$(0), Dtabuf$, &H37)
  622.     WHILE Sonuc
  623.     CALL Yaz(Dtabuf$)
  624.     Sonuc = Findnext%(Dtabuf$)
  625.     WEND
  626.     Dtabuf$ = ""
  627.  
  628.    'Eski dizine geç
  629.    CHDIR Mevcut$
  630. END SUB
  631.  
  632. SUB MakineSuratiniOlc
  633.   DEF SEG = &HB900
  634.   POKE 0, 0
  635.   POKE 1, 0
  636.   POKE 2, 0
  637.   POKE 3, 0
  638. Bekleme
  639.   'Her ihtimale karƒì Degisken=? hìz kontrol
  640.   Degisken = 140
  641.   MakineSurati = Degisken * (PEEK(0) + PEEK(1) * 256 + (PEEK(2) + PEEK(3) * 256) * 65000)
  642. END SUB
  643.  
  644. SUB MesajYaz
  645.     PCOPY 0, 2
  646.     LOCATE , , 0
  647.     M1 = 11
  648.     M3 = LEN(Mesaj$) + 1
  649.     M2 = FIX((80 - M3) / 2)
  650.     M4 = 2
  651.     COLOR Renk(1), Renk(2)
  652.     FOR I = 1 TO M4 - 1
  653.        LOCATE M1 + I, M2
  654.        PRINT "║"; STRING$(M3, " "); "║"
  655.     NEXT
  656.     LOCATE M1, M2
  657.     PRINT "╔"; STRING$(M3, "═"); "╗"
  658.     LOCATE M1 + M4, M2
  659.     PRINT "╚"; STRING$(M3, "═"); "╝";
  660.     DEF SEG = EkranAdresi
  661.     FOR I = 1 TO M3 + 1
  662.     A = ((M1 + M4) * 160 - 1 + (M2 + I) * 2 + 1)
  663.     POKE A + 1, 9
  664.     NEXT
  665.     FOR I = 1 TO M4 + 1
  666.     TR = ((M1 + I - 1) * 160 + (M2 + M3 + 1) * 2 + 1)
  667.     POKE TR, 9: POKE TR + 2, 9
  668.     NEXT
  669.     DEF SEG
  670.     DO
  671.       LOCATE M1 + 1, M2 + 2: PRINT RIGHT$(Mesaj$, M3 - 2)
  672.       IF ASC(Mesaj$) < 34 THEN EXIT DO
  673.       PLAY "O2L8DP64"
  674.       DO: Tercih$ = INKEY$: LOOP UNTIL Tercih$ <> ""
  675.       IF ASC(Mesaj$) = 49 THEN EXIT DO
  676.       SELECT CASE Tercih$
  677.           CASE "E", "e"
  678.           Tercih$ = "E"
  679.           EXIT DO
  680.            CASE "H", "h", CHR$(27)
  681.           EXIT DO
  682.            END SELECT
  683.     LOOP
  684. IF ASC(Mesaj$) <> 33 THEN PCOPY 2, 0
  685. END SUB
  686.  
  687. SUB MikrofonKontrol
  688.        Sec$(0) = "Mikrofon Test"
  689.        MenuYatay = 3
  690.        MenuDikey = 6
  691.        MenuGenis = 66
  692.        MenuYuksek = 17
  693.        CerceveCiz
  694.        COLOR Renk(1), Renk(2)
  695. Y = 7
  696. DO
  697.   IF INP(&H60) = 1 THEN EXIT DO
  698.      OUT Sbase + 12, 32
  699.      A = INP(Sbase + 10)
  700.      A = FIX(A / 11)
  701.      IF A > 11 THEN C = 1 ELSE C = -1
  702.      IF A = 11 THEN B$ = CHR$(196) ELSE B$ = CHR$(219)
  703.   FOR I = 11 TO A STEP C
  704.      LOCATE I, Y
  705.      K = SCREEN(I, Y)
  706.      IF K = 32 OR K = 196 THEN PRINT B$
  707.   NEXT
  708.      Y = Y + .0625
  709.      IF Y > 72 THEN
  710.     Y = 7
  711.     FOR I = 4 TO 19
  712.        LOCATE I, 7
  713.        PRINT SPACE$(66)
  714.     NEXT
  715.      END IF
  716. LOOP
  717. END SUB
  718.  
  719. SUB SesDinle
  720. Blok$ = ""
  721. MakineSuratiniOlc
  722. Port = Sbase + 12
  723. OUT Port, &HD1
  724. DinleDosya$ = Dizin$ + Dosya$
  725. CLOSE #1
  726. OPEN DinleDosya$ FOR BINARY AS #1
  727. A$ = SPACE$(20)
  728. GET #1, , A$
  729. GET #1, , BaslamaYeri%
  730. GET #1, , Versiyon%
  731. GET #1, , Kontrol%
  732. A$ = " "
  733. GET #1, BaslamaYeri%, A$
  734. GOSUB DosyaAnaliz
  735. DEF SEG = &HB900
  736.   REDIM A%(32766)
  737.   C = VARSEG(A%(0))
  738.     bl7 = FIX(C / 256)
  739.     bl8 = C - bl7 * 256
  740.     POKE 0, bl8
  741.     POKE 1, bl7
  742.   C = VARPTR(A%(0))
  743.     bl7 = FIX(C / 256)
  744.     bl8 = C - bl7 * 256
  745.     POKE 2, bl8
  746.     POKE 3, bl7
  747.   C = Port
  748.     bl7 = FIX(C / 256)
  749.     bl8 = C - bl7 * 256
  750.     POKE 4, bl8
  751.     POKE 5, bl7
  752.  
  753.   C = LEN(Blok$) + 100
  754.     bl7 = FIX(C / 256)
  755.     bl8 = C - bl7 * 256
  756.   POKE 8, 100
  757.   POKE 9, 0
  758.   POKE 10, bl8
  759.   POKE 11, bl7
  760. FOR I = 1 TO LEN(DinleDosya$)
  761.   POKE 29 + I, ASC(MID$(DinleDosya$, I, 1))
  762.   POKE 30 + I, 0
  763. NEXT
  764. FOR I = 1 TO LEN(Blok$)
  765.   POKE 99 + I, ASC(MID$(Blok$, I, 1))
  766.   FOR Y = 1 TO 8
  767.       POKE 100 + I + Y, 0
  768.   NEXT
  769. NEXT
  770.   Mesaj$ = "!" + Dosya$ + " çalìnìyor....Esc)Bitir"
  771.   MesajYaz
  772.   SBlaster
  773.   A$ = INKEY$
  774. EXIT SUB
  775.  
  776. DosyaAnaliz:
  777. DO
  778.   GOSUB Dataal2
  779.   SELECT CASE BlokTipi
  780.     CASE 1
  781.      GOSUB b2lok1
  782.     CASE 2
  783.      GOSUB b2lok2
  784.     CASE 3
  785.      GOSUB b2lok3
  786.     CASE 4
  787.      GOSUB b2lok4
  788.     CASE 5
  789.      GOSUB b2lok5
  790.     CASE 6
  791.      GOSUB b2lok6
  792.     CASE 7
  793.      GOSUB b2lok7
  794.     CASE 0
  795.      EXIT DO
  796.   END SELECT
  797. LOOP
  798. RETURN
  799.  
  800. Dataal2:
  801. A$ = " "
  802. GET #1, , A$
  803. BlokTipi = ASC(A$)
  804. RETURN
  805.  
  806. buyuklukal2:
  807.   Buyuk = 0
  808.   GOSUB Dataal2
  809.   Buyuk = Buyuk + BlokTipi - 2
  810.   GOSUB Dataal2
  811.   Buyuk = Buyuk + BlokTipi * 256
  812.   GOSUB Dataal2
  813.   Buyuk = Buyuk + BlokTipi * 65536
  814. RETURN
  815.  
  816. oku22:
  817. Yer2 = LOC(1)
  818. oku11:
  819.   IF Buyuk - Yer > 54000 THEN Uzunluk = 54000 ELSE Uzunluk = Buyuk - Yer
  820.   OrnekRate = (MakineSurati / Ornekleme) * Paket
  821.   Bl1 = FIX(LOC(1) / 65536)
  822.   Bl2 = LOC(1) - Bl1 * 65536
  823.   C = Bl1
  824.     bl7 = FIX(C / 256)
  825.     bl8 = C - bl7 * 256
  826.     Blok$ = Blok$ + CHR$(bl8) + CHR$(bl7)
  827.   C = Bl2
  828.     bl7 = FIX(C / 256)
  829.     bl8 = C - bl7 * 256
  830.     Blok$ = Blok$ + CHR$(bl8) + CHR$(bl7)
  831.   C = Uzunluk
  832.     bl7 = FIX(C / 256)
  833.     bl8 = C - bl7 * 256
  834.     Blok$ = Blok$ + CHR$(bl8) + CHR$(bl7)
  835.  
  836.   C = OrnekRate
  837.     bl7 = FIX(C / 256)
  838.     bl8 = C - bl7 * 256
  839.     Blok$ = Blok$ + CHR$(bl8) + CHR$(bl7)
  840.  
  841.   Yer2 = Yer2 + Uzunluk
  842.   A$ = " "
  843.   GET #1, Yer2, A$
  844.   Yer = Yer + Uzunluk
  845.   IF INP(&H60) = 1 THEN RETURN
  846.   IF Yer <> Buyuk THEN GOTO oku22
  847. RETURN
  848.  
  849. b2lok1:
  850.   GOSUB buyuklukal2
  851.  
  852.   GOSUB Dataal2
  853.   Ornekleme = 1000000 \ (256 - BlokTipi)
  854.   GOSUB Dataal2
  855.   Paket1 = 8 / (BlokTipi + 1)
  856.   Paket = BlokTipi + 1
  857.   Yer = 0
  858.   GOSUB oku22
  859. RETURN
  860.  
  861. b2lok2:
  862.   GOSUB buyuklukal2
  863.   Yer = 0
  864.   GOSUB oku22
  865. RETURN
  866.  
  867. b2lok3:
  868.   GOSUB buyuklukal2
  869.   GOSUB Dataal2
  870.   SessizOrnekleme = 1000000 \ (256 - BlokTipi)
  871.   'Sessizlik bloºu dikkate alìnmamìƒtìr
  872. RETURN
  873.  
  874. b2lok4:
  875.   GOSUB buyuklukal2
  876.   Marker = 0
  877.   GOSUB Dataal2
  878.   Marker = Marker + BlokTipi
  879.   GOSUB Dataal2
  880.   Marker = Marker + BlokTipi * 256
  881. RETURN
  882.  
  883. b2lok5:
  884.   GOSUB buyuklukal2
  885.   Mesaj$ = ""
  886.   DO
  887.     GOSUB Dataal2
  888.     Mesaj$ = Mesaj$ + CHR$(BlokTipi)
  889.     IF BlokTipi = 0 THEN EXIT DO
  890.   LOOP
  891.   'RTRIM$(LEFT$(Mesaj$ + SPACE$(30), 30)); " ƒeklinde baƒlayan mesaja rastlandì.."
  892. RETURN
  893.  
  894. b2lok6:
  895.   GOSUB buyuklukal2
  896.   Tekrar = 0
  897.   GOSUB Dataal2
  898.   Tekrar = Tekrar + BlokTipi
  899.   GOSUB Dataal2
  900.   Tekrar = Tekrar + BlokTipi * 256
  901.   IF Tekrar > 15 THEN
  902.      Tekrar = 15
  903.      'En fazla 15 tekrar yapìlmasìna müsaade edilecektir.
  904.   END IF
  905.   Nerden = LOC(1)
  906. RETURN
  907.  
  908. b2lok7:
  909.   GOSUB buyuklukal2
  910.   IF Tekrar <> 65535 THEN Tekrar = Tekrar - 1
  911.   IF Tekrar > 0 THEN
  912.     A$ = " "
  913.     GET #1, Nerden, A$
  914.     GOSUB DosyaAnaliz
  915.   END IF
  916. RETURN
  917.  
  918.  
  919. END SUB
  920.  
  921. SUB SesDosyaTara
  922.   PCOPY 3, 0
  923.   FOR I = 1 TO Kapasite
  924.        Sec$(I) = ""
  925.   NEXT
  926.  
  927.  IF LEN(Dizin$) > 3 THEN
  928.    Adet = 1
  929.    Sec$(1) = "Önceki... <Dz>"
  930.  ELSE
  931.    Adet = 0
  932.  END IF
  933.  
  934.   CALL Liste
  935. END SUB
  936.  
  937. SUB SesKaydet
  938.     MakineSuratiniOlc
  939.     Sec$(0) = "Ornekleme Hìzì"
  940.     Sec1$(1) = CHR$(12) + " Saniyede 3900 byte "
  941.     Sec1$(2) = CHR$(11) + " Saniyede 6000 byte "
  942.     Sec1$(3) = CHR$(11) + " Saniyede 8000 byte "
  943.     Sec1$(4) = CHR$(12) + " Saniyede 10000 byte "
  944.     Sec1$(5) = CHR$(11) + " Saniyede 11000 byte "
  945.     Sec1$(6) = CHR$(12) + " Saniyede 12000 byte "
  946.     Sec1$(7) = CHR$(12) + " Saniyede 13000 byte "
  947.     Sec1$(8) = CHR$(12) + " Saniyede 14000 byte "
  948.     Sec1$(9) = CHR$(12) + " Saniyede 15000 byte "
  949.     Sec1$(10) = CHR$(2) + " Klavyeden giriƒ "
  950.     MenuYatay = 4
  951.     MenuDikey = 29
  952.     MenuGenis = 21
  953.     MenuYuksek = 11
  954.     MenuSecim$ = "968012345K"
  955.     HareketliMenu
  956.     Frekans = VAL(MID$(Sec1$(Yatay - MenuYatay), 12, 5))
  957.     IF Tus$ = "" THEN EXIT SUB
  958.        IF Frekans = 0 THEN
  959.       Sec$(0) = "Hìz"
  960.       MenuYatay = 17
  961.       MenuDikey = 35
  962.       MenuGenis = 7
  963.       MenuYuksek = 2
  964.       CerceveCiz
  965.       VerialYatay = 18
  966.       VerialDikey = 37
  967.       Verial$ = ""
  968.       Veritipi = 2
  969.       VerialBoy = 5
  970.       VeriAlma
  971.       Frekans = VAL(Verial$)
  972.       IF Frekans < 3900 OR Frekans > 42500 THEN EXIT SUB
  973.       IF Z = 27 THEN EXIT SUB
  974.        END IF
  975.        Sec$(0) = "Dosya Adì"
  976.        MenuYatay = 17
  977.        MenuDikey = 5
  978.        MenuGenis = 66
  979.        MenuYuksek = 2
  980.        CerceveCiz
  981.        VerialYatay = 18
  982.        VerialDikey = 7
  983.        Verial$ = LEFT$(Dizin$ + SPACE$(64), 64)
  984.        Veritipi = 2
  985.        VerialBoy = 64
  986.        VeriAlma
  987.        Verial$ = RTRIM$(Verial$)
  988.        IF INSTR(Verial$, ".") = 0 THEN Verial$ = Verial$ + ".VOC"
  989.        IF Z = 27 THEN EXIT SUB
  990.      KayDosya$ = Verial$
  991.      Mesaj$ = "!" + Verial$ + " kaydediliyor....Esc)Bitir"
  992.      MesajYaz
  993.  
  994.   CLOSE #1
  995.   OPEN KayDosya$ FOR BINARY AS #1
  996.   IF LOF(1) <> 0 THEN
  997.       Mesaj$ = "2Bu isimde dosya var üzerine yazìlsìn mì? E)vet  H)ayìr"
  998.       MesajYaz
  999.       IF Tercih$ <> "E" THEN EXIT SUB
  1000.       CLOSE #1
  1001.       KILL KayDosya$
  1002.   END IF
  1003.   CLOSE #1
  1004.   Bekle = MakineSurati / Frekans
  1005.  
  1006.   REDIM A%(32766)
  1007.   DEF SEG = &HB900
  1008.   C = VARSEG(A%(0))
  1009.     bl7 = FIX(C / 256)
  1010.     bl8 = C - bl7 * 256
  1011.     POKE 4, bl8
  1012.     POKE 5, bl7
  1013.   C = VARPTR(A%(0))
  1014.     bl7 = FIX(C / 256)
  1015.     bl8 = C - bl7 * 256
  1016.     POKE 6, bl8
  1017.     POKE 7, bl7
  1018.   FOR I = 1 TO LEN(KayDosya$)
  1019.        POKE I + 9, ASC(MID$(KayDosya$, I, 1))
  1020.   NEXT
  1021.   POKE I + 9, 0
  1022.  
  1023.   POKE 1, FIX(Bekle / 256)
  1024.   POKE 0, Bekle - PEEK(1) * 256
  1025.   POKE 3, FIX(Sbase / 256)
  1026.   POKE 2, Sbase - PEEK(3) * 256
  1027.  
  1028.   Kaydet
  1029.   CLOSE #1
  1030.   OPEN KayDosya$ FOR BINARY AS #1
  1031.  
  1032.   A$ = CHR$(0)
  1033.   PUT #1, LOF(1) + 1, A$
  1034.  
  1035.   A = LOF(1) - 31
  1036.   Uc = FIX(A / 65536)
  1037.   iki = FIX((A - Uc * 65536) / 256)
  1038.   bir = A - Uc * 65536 - iki * 256
  1039.  
  1040.   A$ = "Creative Voice File" + CHR$(&H1A) + CHR$(&H1A) + CHR$(0) + CHR$(&HA) + CHR$(1) + CHR$(&H29) + CHR$(&H11)
  1041.   A$ = A$ + CHR$(1) + CHR$(bir) + CHR$(iki) + CHR$(Uc) + CHR$(256 - 1000000 / Frekans) + CHR$(0)
  1042.   PUT #1, 1, A$
  1043.   Hata = 2
  1044. END SUB
  1045.  
  1046. SUB VeriAlma
  1047.      IF Verial$ = "" THEN Verial$ = SPACE$(VerialBoy)
  1048.      F = LEN(RTRIM$(Verial$)) + 1: G = 1
  1049.   DO
  1050.      LOCATE VerialYatay, VerialDikey
  1051.      COLOR Renk(5), Renk(6)
  1052.      IF F > VerialBoy THEN F = VerialBoy: G = 0
  1053.      PRINT Verial$
  1054.      LOCATE VerialYatay, VerialDikey + F - 1, 1
  1055.      IF JL = 1 THEN LOCATE , , , 4, 7 ELSE LOCATE , , , 6, 7
  1056.      DEF SEG = 0: POKE 1050, PEEK(1052)
  1057.      DO: Tus$ = INKEY$: LOOP UNTIL Tus$ <> ""
  1058.  
  1059.      IF LEN(Tus$) = 2 THEN
  1060.     Z = ASC(RIGHT$(Tus$, 1))
  1061.     SELECT CASE Z
  1062.        CASE 77
  1063.           F = F + 1
  1064.        CASE 75
  1065.           IF F > 1 THEN F = F - 1
  1066.        CASE 83
  1067.           Verial$ = LEFT$(Verial$, F - 1) + RIGHT$(Verial$, VerialBoy - F) + " "
  1068.        CASE 82
  1069.           IF JL = 0 THEN JL = 1 ELSE JL = 0
  1070.        CASE 80, 72
  1071.           EXIT DO
  1072.     END SELECT
  1073.      ELSE
  1074.     Z = ASC(Tus$)
  1075.     SELECT CASE Z
  1076.        CASE 27, 13
  1077.           EXIT DO
  1078.        CASE ELSE
  1079.          IF Z = 8 THEN
  1080.         IF F > 1 THEN
  1081.           F = F - 1
  1082.           Verial$ = LEFT$(Verial$, F - 1) + RIGHT$(Verial$, VerialBoy - F) + " "
  1083.         END IF
  1084.          ELSE
  1085.            Normal = 0
  1086.            IF INSTR(Al$(Veritipi), Tus$) > 0 THEN Normal = 1
  1087.            IF Normal = 1 THEN
  1088.          IF JL = 1 THEN MID$(Verial$, F, 1) = Tus$ ELSE Verial$ = LEFT$(Verial$, F - 1) + Tus$ + MID$(Verial$, F, VerialBoy - F)
  1089.          F = F + 1
  1090.            ELSE
  1091.          PLAY "O2L8DP64"
  1092.            END IF
  1093.          END IF
  1094.     END SELECT
  1095.     END IF
  1096. LOOP
  1097. LOCATE , , 0
  1098. END SUB
  1099.  
  1100. SUB Yaz (Bulunan$) STATIC
  1101.     IF Adet = Kapasite THEN EXIT SUB
  1102.     A$ = MID$(Bulunan$, 31, INSTR(31, Bulunan$, CHR$(0)) - 31)
  1103.     IF (ASC(MID$(Bulunan$, 22, 4)) AND &H10) AND LEFT$(A$, 1) <> "." THEN
  1104.     Adet = Adet + 1
  1105.     Sec$(Adet) = LEFT$(A$ + SPACE$(12), 12) + "<Dz>"
  1106.     ELSE
  1107.     IF INSTR(A$, ".VOC") > 0 THEN
  1108.        Adet = Adet + 1
  1109.        Sec$(Adet) = A$
  1110.     END IF
  1111.     END IF
  1112. END SUB
  1113.  
  1114.